//  object表示一个js对象
let a: object;
// 方法一
a = {};
// 方法二
a = function(){};

// 对对象的属性进行类型定义
let b:  {name: string, age?: number} //?表示age属性可有可无
b = {name: 'zhangsan', age: 2}
b = {name: 'zhangsan'}
// 上述方法当字段过多，需要写?号太多，可以用以下方法进行定义
let c: {name: string,[propName: string]:any}
c = {name:'zhangsan',age:44,sex:'男'}


// 设置函数结构的类型声明
// 语法： （形参：类型，形参：类型）=> 返回值
let d: (a:number, b:number)=>number;

d = function(a, b){
    return a+b;
}

//字符串数组
let e: string[];  
e = ['a', 'b', 'c']
// e = ['a', 'b', 'c',1] //报错

// 数值数组
// 方法一
let f: number[];
f = [1,2,3,4,5,6]
// 方法二
let g: Array<number>;
g = [1,2,3]


// 元祖
let h: [string,string]
h = ['hello', 'abc']
// h = ['hello', 'abc','e'] //超长

// 枚举
enum Gender{
    Male =1,
    Female = 0
}

let i: {name:string,gender: Gender}

i = {
    name:'张杰',
    gender:Gender.Male
}

console.log(i.gender === Gender.Male);


// & 可以用来做对象连接，两个同时满足
let j: {name: string} & {age: number};
j = {name: 'zhangsan', age: 23}


// 类型别名

type myType = 1 | 2 | 3 | 4 | 5
let k: myType
let l: myType
